package com.dk.test;


import com.dk.task.MyThread01;
import com.dk.task.MyThread02;
import com.dk.task.MyThread03;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

/*
 * 并行：同一时刻多个指令在多个CPU上同时执行
 * 并发：同一时刻多个指令在单个CPU上交替执行
 *
 * */
public class Main {


    public static void main(String[] args) throws ExecutionException, InterruptedException {
        /*MyThread01 thread01 = new MyThread01();
        MyThread01 thread02 = new MyThread01();
        thread01.start();
        thread02.start();*/

        /*MyThread02 myThread02 = new MyThread02();
        new Thread(myThread02).start();
        new Thread(myThread02).start();*/

        /*
        * 概述：
        *   多个线程执行同一个任务，使用的是同一个结果管理器那么结果管理器得到的结果是最先完成任务的线程的执行结果，其余未执行完成的线程将不再执行
        *   如果要多个线程执行同一个任务分别获取每个线程的执行结果，就需要创建多个结果管理器然后多个线程分别指定结果管理器
        * */
        // 创建要执行的任务
        MyThread03 myThread03 = new MyThread03();
        // 创建FutureTask对象，用于管理线程执行的结果
        FutureTask<Integer> futureTask1 = new FutureTask<>(myThread03);
        FutureTask<Integer> futureTask2 = new FutureTask<>(myThread03);
        // 创建线程
        Thread t1 = new Thread(futureTask1);
        Thread t2 = new Thread(futureTask2);
        // 执行任务
        t1.start();
        t2.start();
        // 获取线程执行后的结果
        System.out.println(futureTask1.get());
        System.out.println(futureTask2.get());
    }
}
